#include "board.h"
#include "hpm_mcan_drv.h"



// 辅助函数：将单个十六进制字符转换为数值 (0-15)
uint8_t hex_char_to_value(char c) {
    if (c >= '0' && c <= '9') return c - '0';
    if (c >= 'A' && c <= 'F') return c - 'A' + 10;
    if (c >= 'a' && c <= 'f') return c - 'a' + 10;
    return 0xFF; // 无效字符返回0xFF而非0
}

// 解析ASCII十六进制字符串为数值数组
uint8_t parse_hex_string(const char *hex_str, uint8_t *out_buffer, uint8_t max_len) {
    uint8_t result_len = 0;
    uint8_t byte_value = 0;
    uint8_t nibble_count = 0;
    uint8_t invalid_char = 0;
    
    while (*hex_str && result_len < max_len) {
        if (*hex_str == ' ') {
            // 空格表示当前字节完成
            if (nibble_count == 2) {
                out_buffer[result_len++] = byte_value;
                nibble_count = 0;
            }
        } else {
            // 处理十六进制字符
            uint8_t nibble = hex_char_to_value(*hex_str);
            
            if (nibble == 0xFF) {
                invalid_char = 1;
            } else if (nibble_count == 0) {
                // 高4位
                byte_value = nibble << 4;
                nibble_count = 1;
            } else {
                // 低4位
                byte_value |= nibble;
                out_buffer[result_len++] = byte_value;
                nibble_count = 0;
            }
        }
        hex_str++;
    }
    
    // 处理最后一个不完整的字节（仅当有两个有效十六进制字符时）
    if (nibble_count == 2 && !invalid_char) {
        out_buffer[result_len++] = byte_value;
    } else if (nibble_count == 1 && !invalid_char) {
        // 单个十六进制字符，不添加到结果中
    }
    
    return result_len;
}







